#pragma once

#include <cstdint>


enum class EScriptInnerType
{
    Object,
    String,            //utf32 string
    NullPtr,            // null is  std::nullptr_t type, only have one value: nullptr
    NullObject,   // null object is CNullObject type, only have one value: an empty TSharedObjectPtr<RObject>
    Void,
    Bool,
    Char,              //32bit char 


    Uint8,            // uint8_t in cpp
    Int8,               // int8_t in cpp
    Uint16,          // uint16_t in cpp
    Int16,           // int16_t in cpp
    Uint32,            // uint32 ,uint32 in cpp
    Int32,              // int32  ,int32 in cpp
    Uint64,            // uint64 in cpp
    Int64,              // int64 in cpp, default int type in script
    Float,             //float32 in cpp
    Double,            //double in cpp
    Decimal,           //128bit float 
    // Nuint=Ulong,            // platform unsigned int, size dependenced by platform
    // Nint=Long,
};

namespace WH
{
    bool IsNumberType(EScriptInnerType InType);
};

EScriptInnerType GetWiderNumberType(EScriptInnerType InType1, EScriptInnerType InType2);

class CType;
CType* GetNativeType(EScriptInnerType InType); 
